

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

import java.awt.event.KeyEvent;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;

/**
 *
 * @author Cleiton
 */
public abstract class PersonalizarTable {

    private JTable table;
    /**
     * pra informar qual linha esta selecionada, pra quanto for alterada ele fazer determinada ação;
     */
    private int linha = -1;
    private DefaultTableModel defaultTableModel;

    /**
     * Classe criada para Manipulação de Tabelas
     * @param table 
     */
    public PersonalizarTable(JTable table) {
        this.table = table;
        defaultTableModel = (DefaultTableModel) table.getModel();
        listadeAções();
    }

    /**
     * Realiza determinado Evento quando a Tabela for alterada
     * @param evt 
     */
    abstract void actionClicarTable(int linha);

    /**
     * Implementar determinado ação quando uma linha da tabela for alterado
     */
    abstract void actionLinhaAlterada(int linha);

    /**
     * Limpa uma determinada Tabela;
     */
    public void limparTabela() {
        // defaultTableModel.fireTableRowsDeleted(0, defaultTableModel.getRowCount());
        for (int i = defaultTableModel.getRowCount(); i > 0; i--) {
            defaultTableModel.removeRow(0);
        }
    }

    /**
     * Adiciona todas as ações de uma tabela
     */
    private void listadeAções() {
        this.table.addMouseListener(new java.awt.event.MouseAdapter() {

            @Override
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                int aux = table.getSelectedRow();
                System.out.println(aux);
                if (aux != linha) {
                    linha = aux;
                   actionClicarTable(linha);
                }
            }
        });
        table.addKeyListener(new java.awt.event.KeyAdapter() {

            @Override
            public void keyReleased(java.awt.event.KeyEvent evt) {
                linhaAlterada(evt);
            }
        });
    }

    /***
     * Percebi quando uma linha é alterada de uma tabela
     * @param evt 
     */
    private void linhaAlterada(KeyEvent evt) {
        int aux = table.getSelectedRow();
        if (aux != linha) {
            linha = aux;
            actionLinhaAlterada(linha);
        }
    }

    /**
     * Obtem a linha que esta sendo alterada pelo mouse ou pelo teclado
     * @return linha que esta sendo alterada
     */
    public int getLinha() {
        return linha;
    }

    /**
     * altera a linha que esta sendo alterada pelo teclado ou mouse
     * @param linha valor que a linha vai ser alterada
     */
    public void setLinha(int linha) {
        this.linha = linha;
    }

    /**
     * Obtem o modelo da tabela.
     * @return modelo da tabela
     */
    public DefaultTableModel getDefaultTableModel() {
        return defaultTableModel;
    }

    /**
     * Altera o modelo da tabela
     * @param defaultTableModel modelo de tabela pra qual a tabela vai ser alterada
     */
    public void setDefaultTableModel(DefaultTableModel defaultTableModel) {
        this.defaultTableModel = defaultTableModel;
    }
}
